import { canIUse, getUpdateManager, showModal, showLoading, hideLoading } from '@tarojs/taro'

/**
 * 判断小程序是否有新版本，如果有，提示用户更新
 */
export function autoWeappUpdate() {
  if (canIUse('getUpdateManager')) {
    const updateManager = getUpdateManager()
    // 检查小程序是否有新版本发布
    updateManager.onCheckForUpdate((res) => {
      if (res.hasUpdate) {
        // 检测到新版本，需要更新提示
        showModal({
          title: '更新提示',
          content: '新版本已经准备好，是否重启应用？',
          showCancel: false,
          confirmText: '重启应用',
          success: (resa) => {
            if (resa.confirm) {
              downLoadAndUpdate(updateManager)
            }
          }
        })
      }
    })
  }
}

/**
 * 下载小程序新版本，并重启应用
 */
export function downLoadAndUpdate(updateManager) {
  showLoading()
  // 静默下载更新小程序新版本
  updateManager.onUpdateReady(() => {
    hideLoading()
    // 新版本已经下载好，调用 applyUpdate 重启
    updateManager.applyUpdate()
  })
  updateManager.onUpdateFailed(() => {
    hideLoading()
    // 新版本下载失败
    showModal({
      showCancel: false,
      title: '已经有新版本了哟~',
      content: '新版本已经上线啦，请您删除当前小程序，重新搜索打开',
      confirmText: '我知道了'
    })
  })
}
